const fs = require('fs');
const path = require('path');

/**
 * 查找并复制包含特定字符串的行
 * @param {string} sourceDir 源目录路径
 * @param {string} targetDir 目标目录路径
 */
function copyStyleLine(sourceDir, targetDir) {
    console.log(`开始从 ${sourceDir} 复制样式行到 ${targetDir}`);
    
    // 检查目录是否存在
    if (!fs.existsSync(sourceDir)) {
        console.error(`错误: 源目录 '${sourceDir}' 不存在`);
        process.exit(1);
    }
    
    if (!fs.existsSync(targetDir)) {
        console.error(`错误: 目标目录 '${targetDir}' 不存在`);
        process.exit(1);
    }
    
    // 读取源目录中的所有文件
    const processFile = (filePath) => {
        const relativePath = path.relative(sourceDir, filePath);
        const targetFilePath = path.join(targetDir, relativePath);
        
        // 检查目标文件是否存在
        if (!fs.existsSync(targetFilePath)) {
            console.log(`跳过: 目标文件 '${targetFilePath}' 不存在`);
            return;
        }
        
        try {
            // 读取源文件内容
            const sourceContent = fs.readFileSync(filePath, 'utf8');
            
            // 查找包含 'style?: ((instance:' 的行
            const styleLine = sourceContent.split('\n').find(line => 
                // line.includes('style?: ((instance:')
                line.includes('@memo() style?: ((__memo_context:')
            );
            
            if (!styleLine) {
                console.log(`未找到匹配行: ${relativePath}`);
                return;
            }
            
            // 读取目标文件内容
            const targetContent = fs.readFileSync(targetFilePath, 'utf8');
            
            // 添加找到的行到目标文件末尾
            const newContent = targetContent + '\n' + styleLine.trim() + '\n';
            
            // 写入更新后的内容
            fs.writeFileSync(targetFilePath, newContent, 'utf8');
            console.log(`已更新: ${relativePath}`);
        } catch (error) {
            console.error(`处理文件 '${relativePath}' 时出错: ${error.message}`);
        }
    };
    
    // 递归处理目录
    const processDirectory = (dirPath) => {
        const entries = fs.readdirSync(dirPath, { withFileTypes: true });
        
        for (const entry of entries) {
            const entryPath = path.join(dirPath, entry.name);
            
            if (entry.isDirectory()) {
                processDirectory(entryPath);
            } else if (entry.isFile()) {
                processFile(entryPath);
            }
        }
    };
    
    // 开始处理源目录
    processDirectory(sourceDir);
}

/**
 * 主函数
 */
function main() {
    const args = process.argv.slice(2);
    
    if (args.length < 2) {
        console.log('使用方法: node copy-style-line.js <源目录> <目标目录>');
        process.exit(1);
    }
    
    const sourceDir = path.resolve(args[0]);
    const targetDir = path.resolve(args[1]);
    
    copyStyleLine(sourceDir, targetDir);
}

// 执行主函数
main();    